package mcjty.rftools.blocks.storage.sorters; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; import org.apache.commons.lang3.tuple.Pair; import java.util.Comparator; public class OreTypeItemSorter implements ItemSorter { @Override public String getName() { return "type"; } @Override public String getTooltip() { return "Sort on ore type"; } @Override public int getU() { return 14*16; } @Override public int getV() { return 16; } @Override public Comparator<Pair<ItemStack, Integer>> getComparator() { return new Comparator<Pair<ItemStack, Integer>>() { @Override public int compare(Pair<ItemStack, Integer> o1, Pair<ItemStack, Integer> o2) { return compareOreType(o1, o2); } }; } @Override public boolean isSameGroup(Pair<ItemStack, Integer> o1, Pair<ItemStack, Integer> o2) { String oreName1 = getOreType(o1); String oreName2 = getOreType(o2); if (oreName1 == null) { return oreName2 == null; } if (oreName2 == null) { return false; } return oreName1.equals(oreName2); } public static int compareOreType(Pair<ItemStack, Integer> o1, Pair<ItemStack, Integer> o2) { String oreName1 = getOreType(o1); String oreName2 = getOreType(o2); if (oreName1 == null) { if (oreName2 == null) { return NameItemSorter.compareNames(o1, o2); } else { return -1; } } if (oreName2 == null) { return 1; } if (oreName1.equals(oreName2)) { return NameItemSorter.compareNames(o1, o2); } return oreName1.compareTo(oreName2); } private static String getOreType(Pair<ItemStack, Integer> object) { int[] iDs = OreDictionary.getOreIDs(object.getKey()); String name; if (iDs.length < 1) { name = null; } else { name = OreDictionary.getOreName(iDs[0]); } return name; } @Override public String getGroupName(Pair<ItemStack, Integer> object) { String name = getOreType(object); if (name == null || name.isEmpty()) { return "none"; } return name; } }